查看原文
其他

直观理解!你一定要读一下的“矩阵和线性代数入门”

家里有只肉丸子 深度学习这件小事 2022-03-29

首发于 | 知乎 作者 | 家里有只肉丸子

链接 | https://zhuanlan.zhihu.com/p/137112358


许多同学一听到高等代数(线性代数)的名字就瑟瑟发抖,觉得似乎是极困难的科目。

在我大一那年,学完高等代数后,确实有不知所云之感。一本高代学完,除了记住各种概念,定义,什么若尔当标准型,什么矩阵的秩……其他什么也不了解,最后考研的时候拿起教科书重新啃了一遍,宛若新学。

很多朋友可能觉得,这门课就是来折磨广大大学生朋友的吧!

其实不然,随着读书越久,加上工作了几年,越发觉得当年的线性代数学得不够,学得不好。

那么,我就抛砖引玉,来聊聊,线性代数到底是个什么东西,那些稀奇古怪的概念是怎么来的,又要到哪去。聊到哪算哪哈。

下面我的讨论主要集中在工程领域,主要涵盖一些线性代数和数值分析的知识。

(因为并非严格论述,所以难免有所疏漏,欢迎斧正)


   1.线性代数怎么来的?

有些线性代数教材上来就给大家讲线性空间,这不禁会让人头晕脑胀。其实,线性代数这门学科,是和生产生活联系极其紧密的,它的来源也并不复杂。

线性代数这门学科的出现,最开始应该是来源于线性方程组。下面这个就是一个典型的线性方程组:

方程大家都知道,初中就学过是吧,那么什么是线性方程?

就是未知数都是一次的方程。比如

这样的方程。

线性方程是比较简单的一类方程,但它的实用性一点都不简单。在复杂的工业控制系统中、生物学家和人口学家的模型里,或是风洞实验室的分析过程中都有现行方程的影子。

当然,更复杂的非线性方程也很重要,但限于难度和篇幅原因,这里暂时先不讨论。

方程是数学家们用来描述世界的工具(之一),也可以说,是数学家用来描述世界规律的工具。

什么是世界的规律?那就是道

——道可道?可道!

而线性方程组就是线性方程的扩展。这也就引出了我们今天所说的主题——线性代数

数学家们一开始可能觉得写那么多字太麻烦,干脆创新一种“记号”——矩阵。

创新记号,简写什么的是数学家的最爱。君不见微积分符号引发了莱布尼兹和牛顿的旷日持久的争议?

于是,通过用一个大写字母,比如A:

来表示一个样子是方阵的数阵,数学家将线性方程组写成了这个样子:

请注意:矩阵的最初目的,就是线性方程组的简写!

于是,现在的线性方程组就可以用三种等价的方式来表述:

  • 矩阵方程 

  • 线性方程组

  • 或者向量方程:  (这种表述其实是后续线性代数的核心思想,但在这里先不多说了)

以上三种表述方式,都有相同的方法来解——通过行化简算法,化简增广矩阵。比如这样:

(这个知识后面会用到,先放一边)

既然创造了新的“记号”,矩阵,数学家们自然要研究一下。


   2.矩阵的本质以及线性代数到底研究什么

2.1 我们先说说矩阵的本质

我们看到一个矩阵,真的是平平无奇。这东西有啥可研究的呢?

对于矩阵,其实可以有两种认识:

矩阵可以看作一个数的矩形表(大部分同学应该都是这么看的)

也可以看作一组列向量!(这个认识是后面线性空间等一系列知识的基础)

而后者,是线性代数的基本思想之一。反过来也成立,向量的线性组合可以看作矩阵与向量的积。

我们现在重新给线性代数确定一下研究范围:

它是研究可以表示为某一固定向量集合  的线性组合的所有向量的一门学科。


刚刚我们说了,我们可以把线性代数方程组表示为矩阵方程的形式:  。

这个方程表示什么意思呢?

可以这样理解:在空间中有一个向量  ,通过矩阵  的作用后,变成了向量 

这种理解,就揭示了矩阵的本质~

而矩阵的本质,可以看作是一种运动或者变换。

那么,事实上,一个  矩阵,就是描述n维线性空间到n维线性空间的线性变换(比如:拉伸, 压缩,投影……)

2.2 再聊一下矩阵的运算

既然矩阵是一种变换,那么自然而然地,我们会想到两个矩阵之间相互作用一下会有什么结果。这就自然地引出了矩阵的运算!

下面来看看矩阵的运算(不具体列举公式了):

  • 加法运算

  • 标量乘法运算

  • 乘法运算

记得我在第1节表粗的那句话吗?——矩阵的最初目的,就是线性方程组的简写!

如果想要理解这些运算的规则,最好的方式是从线性方程组的角度考虑!

比如矩阵的加法运算:

如果你把它还原成线性方程组,那么加法运算不过是线性方程组中未知数的系数相加!

标量乘法和乘法也都可以从线性方程组去理解。

当你知道了这些运算规则之后,可以代入矩阵的几何意义进行理解~

比如矩阵的乘法运算:  。

进行一次变换(  ),在进行一次变换(  ),相当于进行了(  )变换。(你也可以这样理解矩阵的乘法的几何意义:两次变换的叠加)

(但注意:  )

然后,既然矩阵是一种变换,那么自然而然地也有逆向的变换,这个变换就是矩阵的逆。

……………………缓一口气,稍微理解一下的分割线……………………

2.3 一个重要的概念——矩阵的逆

我们在矩阵运算中,研究了两个或多个矩阵相互作用所达成的效果。

矩阵的逆类似于一个数的倒数,你看矩阵逆的定义:

如果满足:

 是一个对角线均为1,其他位置为0的矩阵,简称单位矩阵)

那么,矩阵就是可逆的,且逆矩阵记为 

如果用几何的观点来理解,矩阵的逆就是一个反向变换

比如:

若 A表示顺时针旋转90°的话,那么  就表示逆时针旋转90°

你看:

经过矩阵  变换,在经过矩阵  变换,又变为原来的矩阵。

那么,如果矩阵A是可逆的,可逆矩阵又称为非奇异矩阵。


接下来,很自然的想法就是——

矩阵可逆是否有办法判断呢?

2.4 行列式

有一个办法——那就是通过行列式!(这不是唯一的办法,还可以通过矩阵的秩……)

这里又引入了一个极其重要的概念,它一开始可能仅仅是判断矩阵可逆与否,但后来,数学家逐渐发现了更多作用和意义。

下面我们说说行列式。

行列式的定义看起来很难懂

看看,这是人能记住的么!

当然,如果从低阶往高阶推广,还是稍微有点助记作用。

我们知道,如果一个矩阵行列式不为零,那么这个矩阵可逆。

但是不要着急,行列式可不会这么简单~

我们看这个稀奇古怪的东西虽然一头雾水,但数学家经过仔细思考后发现:

 其实描述了矩阵  的列确定的平行四边形的面积(  为  矩阵时)

或者由  确定的平行六面体的体积(  为  矩阵时)

所以,推而广之啊,行列式的本质就出来了!

行列式的几何性质(本质),是描述n维线性空间中线性变换“大小”的量

……………………………上面的论述请多理解一下哈…………………………

比如在2维空间中,我可以推导出这样一个定理:

设  是一个由  矩阵  确定的线性变换,若  是这个  空间中的一个平行四边形,则

请好好理解上面的事实,有助于逆理解行列式~


好了,回过头来看看矩阵可逆这回事。

想象一下,在一个二维平面上,如果一个A矩阵把一个平行四边形a变成另一个b,这个矩阵A的行列式可以理解为放大的倍数。

当行列式=0的时候,就把这个平行四边形a的面积就变没了!(一条线的面积是0)那肯定没有逆矩阵可以把这条线再变回原来的向量了。

因此,“矩阵A可逆” 完全等价于  不难理解。

讲了这么多,似乎只说了线性代数中一点点微不足道的概念。那么,我们还听说过矩阵分解,谱半径,条件数……一大堆稀奇古怪的东西,那些是怎么来的?

不要着急,所有的事情都不会是无来由的。

下面我说的这个问题很关键,这也是线性代数中无数稀奇古怪的知识的来源。


   3.真实世界中,线性方程组的数值解法

3.1 线性方程组的一般解法

在一开始说起线性方程组的时候,我们说了真实世界中求解线性方程组和我们在学校中做的一样,采用行化简得方法进行求解。(就是我在开头说后面会用到的那个知识点)

我们对这种方法简称为线性方程组的直接数值解法,包括Gauss消去法,列主元Gauss消去法,Gauss-Jordan消去法……

当然,既然有直接的解法,自然还有间接的解法,也就是迭代法,包括Jacobi迭代法,Gauss-Seidle迭代法等(这个暂不讨论)

那么,在运算过程中,什么是最重要的?

精度和运算量!

我们一定要记住,真是世界的问题是充满了误差并且计算力有限的。

我直接告诉你结论:以上三种消去法计算线性方程组的运算量都是  ,(n为变量个数)

这里有一个很有趣的知识点,当年一直觉得很无聊,所以特意拿出来说说。

3.2 矩阵的分解

将矩阵分解为两个或更多个矩阵的乘积。

那么,为什么要引入矩阵的分解呢?其实还要从真实世界说起。

我们以一个最常见的矩阵分解——LU分解为例先说说

 ,其中  是一个下三角矩阵(对角线元素全为1),  是一个上三角矩阵

那么,线性方程组

就可以变成:

这样,就可以拆解为:

好吧,一个方程变成了两个。正像你看到的,矩阵分解就是这么无聊,似乎没啥用处。可是,事实并非如此——

我们来看看矩阵  分解的计算量。如果你去解一个方程组,  分解的运算量是多少呢?哦,没错,也是 

似乎在运算上也不比其他方法强是吧

但是,要知道,我们现实生活中遇到的问题,往往不是一锤子买卖。

比如,你考虑

这样一个由m个方程组组成的系列(这种问题很常见,我们常常把新的数据带入到已有的模型里),那矩阵的LU分解就显现出它的威力了!

LU分解的方法只需要作一次LU分解,然后做m次解三角方程(m为方程组系列中方程组的数目)

比之前说的那几种消去法的运算量少了  次运算!

这就是LU分解的真实意义所在。

那么我们再看一个真实世界的例子:

3.3 一个有趣的小问题:蝴蝶效应,以及所引出的条件数,矩阵范数……

在实际问题中,线性方程组是由计算机求解的。

但要知道,计算机一般把数字用浮点数来表示,数位通常为8-16位,这样就给线性方程组的求解引入了误差

插播一句:为什么理论家没办法治国?因为现实世界是充满了误差和摩擦力的,而理论家往往并不考虑这些。

我们都听说过“蝴蝶效应”。微小的初始误差有可能导致巨大的结果差异。

其实,在求解线性方程组中我们就会遇到这样的问题。

比如这样一个方程组:

这个方程的解是 


我们再看这个方程组:

这个方程组的解是多少呢?乍一看,应该和上一个差不多吧?

可惜,差得有点多!不要眨眼睛~它的解是:

这就说明:

初始条件(A)的微小扰动,造成的结果有巨大的差异!

……………缓一口气,稍微理解一下的分割线………………

我们不妨把这类方程组叫做“蝴蝶效应”方程组(它的正确称呼应该是“病态的”方程组,但这个名字没有我起的名字那么浪漫不是)

那么,我们如何确定这个方程组是这种“蝴蝶效应”方程组呢?这里引入一个概念——条件数(  )

而条件数的定义又则涉及到了矩阵的范数。

其实,范数的引入是很自然的,我们描述一个“数”的大小,用“数值”,描述一个向量的长度(欧式距离),用“欧氏距离”,那么如果我想描述矩阵的“大小”(姑且这样说)该用什么?

用到的就是范数。

范数可以看作抽象的“大小”。而不同的范数可以看作不同度量方式。

范数,谱半径,条件数,甚至特征值这些东东统统都是在研究现实问题中逐渐开发出来的新东西。


   总结

所以,到此稍微总结一下吧:

看了这么多,其实我相信你对线性代数已经有了一个初步的认识了。它就是一门从研究线性方程组起家的学问。当然,后续抽象的部分,比如向量空间,矩阵的秩等等在这里都没有涉及。但我相信,如果你明白了矩阵的一些基本事实,以及他们的来龙去脉,弄懂那些知识并不难~

最后,祝大家好好学习,天天向上~

—完—

为您推荐

IoU、GIoU、DIoU、CIoU损失函数的那点事儿

GitHub重大更新:在线开发上线,是时候卸载IDE了

史上最烂的项目:苦撑12年,600多万行代码...

数据分析入门常用的23个牛逼Pandas代码

知乎高赞:985计算机视觉毕业后找不到工作怎么办?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存